iT邦幫忙

2023 iThome 鐵人賽

DAY 7
0
SideProject30

Nuxt3的初心者之旅:淬鍊出屬於自己的金融投資儀表板系列 第 7

DAY7 - 把股價變成你要的形狀 - Nuxt3的HighChart股價走勢圖

  • 分享至 

  • xImage
  •  

終於開始要進入正題了
先來做一個基本的股價走勢圖吧!

程式碼

<template>
  <ClientOnly>
    <highcharts v-if="realTimeOffer" class="w-[1000px] mx-auto my-10" :constructor-type="'stockChart'"   :options="chartOptions"  />
  </ClientOnly>
</template>
<script setup>

const axios = inject('axios')

// 股價資料
const data = ref()

const getData = () => {
  axios
    .get('https://financialmodelingprep.com/api/v3/historical-chart/1min/%5EGSPC?apikey=不給看')
    .then((res) => {
      console.log(res)
      data.value=res.data
    })
    .catch((err) => {
      console.log(err)
    })
}
onMounted(()=>{
  getData()
})

const realTimeOffer = computed(()=>{
  return data.value?data.value.reverse().map((v)=>{
    const dateTimeString = v.date; // 日期
    let milliseconds // 換算後的時間
    const dateObject = new Date(dateTimeString);
      milliseconds = dateObject.getTime();
    return [milliseconds,v.open]
  }) : undefined
})

const chartOptions = computed(()=>{return{
        title: {
          text: '歷史股價'
        },
        xAxis: {
            gapGridLineWidth: 0
        },
        yAxis: {
          floor: 4300,
          ceiling: 4500
        },
        series: [{
            name: 'test',
            type: 'area',
            data: realTimeOffer.value,
            gapSize: 5,
            tooltip: {
                valueDecimals: 2
            },
        }]
      }}) 
</script>

先說明<highcharts/>元件的部分:

v-if="realTimeOffer" 是透過非同步娶回來的資料,確保拿到資料後再開始render元件
:constructor-type="'stockChart'" 是將其轉為股票用圖
:options="chartOptions" 則是把圖表必須傳入的資料透過prop送進去

Nuxt裡面
圖表因為是在client side生成,server side不會有node
所以需要在外面包一層
讓這個元件只在client side render
才不會有hydration不一致的問題

再來是<script setup>的部分:
先透過axios把資料送進data
但資料格式錯誤,時間順序也錯誤(由大到小)
https://ithelp.ithome.com.tw/upload/images/20230922/20162573NAoTPjHS0u.png
(需要的資料是[毫秒,股價])
所以透過computed在將陣列先做反轉之後
再把日期格式轉成毫秒
最後才return成realTimeOffer放到series這個資料集合裡面

成品

https://ithelp.ithome.com.tw/upload/images/20230922/201625737WO2SORUDM.png

另外
由於股價都是4300~4500之間
所以在y軸部分也要限定範圍
不然會像這樣

https://ithelp.ithome.com.tw/upload/images/20230922/20162573cMqgRRyoXs.png
(猶如一片死海,還以為買到牛皮股)

小結:

前兩天都11點前送出文章
還想說可以往9點邁進
沒想到今天就爆炸啦

我承認都是非同步惹的禍~
:options="chartOptions"更新後資料要再送一次 不然render不出來

明天先挑戰10點前好了...


上一篇
DAY6 - AI魔術師 - 用AI生出好看的UI設計稿
下一篇
DAY8 - 把股價變成你要的形狀 - Nuxt3的HighChart股價走勢圖(2)
系列文
Nuxt3的初心者之旅:淬鍊出屬於自己的金融投資儀表板30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言